iT邦幫忙

2022 iThome 鐵人賽

DAY 5
2
Modern Web

Nuxt 3 學習筆記系列 第 5

[Day 05] Nuxt 3 如何使用 Tailwind CSS

  • 分享至 

  • xImage
  •  

前言

為了後續範例程式在頁面呈現上能有比較好看的樣式,原先有想過使用 UI 框架或純寫 CSS,但是總覺得好像不夠潮,所以呢,我決定帶入近年滿熱門的 CSS 框架 Tailwind CSS,在這系列文章我就不再多花篇幅介紹 Tailwind 的語法及指令等,主要針對 Nuxt 3 如何導入 Tailwind CSS 至專案內使用。

題外話,其實有稍微糾結一下要不要使用 Master CSS,雖然最後決定先緩緩,但我認為它非常有淺力成為這類框架的霸主,大家有空也可以支持一下或玩玩這個由臺灣團隊開發的 CSS 框架哦!


Tailwind CSS

https://ithelp.ithome.com.tw/upload/images/20220920/20152617wbM2FDCCLR.png
Tailwind CSS 是近年滿熱門的 Utility-First CSS 框架,曾掀起一番論戰說 Class 不是讓你這樣用的之類的批評及缺點,但如果你深入暸解它後,確實不可否認它能為你帶來更好的生產效率等諸多優點。

接下來,我會介紹使用 Nuxt Community 釋出的 Tailwind CSS 整合模組,來導入 Tailwind CSS。

使用 Nuxt Tailwind 模組

Step 1. 安裝相關套件

首先安裝 @nuxtjs/tailwindcss

npm install -D @nuxtjs/tailwindcss

Step 2. 添加模組至 nuxt.config.ts

打開 ./nuxt.config.ts@nuxtjs/tailwindcss 模組添加至 modules 設定參數中,完成後看起來會像下面這樣。

// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
  modules: ['@nuxtjs/tailwindcss']
})

Step 3. 重啟 Nuxt 服務

重新啟動我們的 Nuxt 服務。

npm run dev

使用 @nuxtjs/tailwindcss 只需要兩個步驟就完成了 Tailwind CSS 的配置,這個模組已經包含手動安裝時需要建立的 Tailwind CSS 指令 tailwindcss.css 需要的全域設定與 PostCSS 參數選項,同時也預設了 tailwind.config.js 的相關 content 目錄路徑,詳細可以參考 Nuxt Tailwind

擴充或覆寫 @nuxtjs/tailwindcss 配置

如果你沒有特別需要擴充或覆寫設定可以跳過這一段。

專案內若使用 @nuxtjs/tailwindcss 模組,這兩個 tailwind.csstailwind.config.js 檔案其實模組已經有預設,不需要手動建立,tailwind.css 對應模組內的 tailwind.css 可以參考專案檔案內容 tailwind.csstailwind.config.js 則是透過模組動態新增配置。

倘若想要修改也可以透過建立設定檔案來新增或覆寫預設定,例如在專案下分別建立 tailwind.csstailwind.config.js 兩個檔案:

tailwind.css

專案目錄下若存在路徑檔名一致的 ./assets/css/tailwind.css 檔案,@nuxtjs/tailwindcss 就會以這個檔案取代模組內預設tailwind.css 檔案。

tailwind.css 預設內容如下:

@tailwind base;
@tailwind components;
@tailwind utilities;

如果有成功覆蓋配置,在重啟 Nuxt 3 服務時,Terminal 會提示下列字串,表示使用了自訂的tailwind.css

Using Tailwind CSS from ~/assets/css/tailwind.css

tailwind.config.js

專案目錄下若存在 tailwind.config.js 檔案就會以新的配置拓展或覆寫 @nuxtjs/tailwindcss 預設的 tailwind.config

例如,我們想拓展或覆寫 content 的配置

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    './components/**/*.{vue,js,ts}',
    './layouts/**/*.vue',
    './pages/**/*.vue',
    './composables/**/*.{js,ts}',
    './plugins/**/*.{js,ts}',
    './app.{js,ts,vue}'
  ],
  theme: {
    extend: {}
  },
  plugins: []
}

開始感受 Tailwind CSS 的魅力

當我們配置完 Tailwind CSS 並重啟 Nuxt 服務後,我們編輯 app.vue 檔案內容,撰寫以下程式碼:

<template>
  <div class="bg-white py-24">
    <div class="flex flex-col items-center">
      <h1 class="text-6xl font-semibold text-blue-600">2022 iThome</h1>
      <p class="mt-4 text-9xl font-bold text-gray-900">鐵人賽</p>
    </div>
  </div>
</template>

重新瀏覽一次網頁,可以發現排版、顏色、字型都有出現我們設定的效果了。
https://ithelp.ithome.com.tw/upload/images/20220920/20152617n7iga1dvuG.png


自動排序 Tailwind CSS 的 Class

https://ithelp.ithome.com.tw/upload/images/20220920/20152617mx8Q8odqVF.jpg
當我們在寫 Tailwind CSS 時終究會碰到類型過多,第一眼不確定是否包含某個 class,或者對於順序上有強烈統一的要求,那麼這個 Prettier 的插件prettier-plugin-tailwindcss 插件是 Tailwind 推出的,目的在於可以使用官方推薦的 class 順序,來實現自動排序 class 來做到統一程式碼風格。

Tailwind x Prettier

Step 1. 安裝插件

npm install -D prettier-plugin-tailwindcss

如果你不是照著前面的步驟建置專案,請記得確認已經有安裝 prettier 套件。

Step 2. 配置設定檔

開啟 .prettierrc.cjs 檔案,添加 'prettier-plugin-tailwindcss'plugins 陣列中:

module.exports = {
  plugins: [
    'prettier-plugin-tailwindcss'
  ],
  printWidth: 100,          // 每行文字數量達 100 字元就換到新的一行
  semi: false,              // 每個語句的結尾不需要分號
  singleQuote: true,        // 字串使用單引號,而不是雙引號
  trailingComma: 'none'     // 如 Object、Array 內的元素不需要尾隨逗號
}

Step 3. 自動修正效果

你可以在編輯器內移至錯誤波浪底線使用「快速修復 (Quick Fix)...」功能,或設置 "editor.codeActionsOnSave""source.fixAll.eslint": true 來達到保存後自動修正 prettier 引發的 ESLint 錯誤。
https://i.imgur.com/uBxxnJs.gif


小結

相較於 Tailwind CSS 官方指引的安裝方式,使用 Nuxt Community 幫我們整理好的 @nuxtjs/tailwindcss 模組,可以省去繁瑣的設定步驟,也解決了一些目前 Nuxt 3 專案中,導入 Tailwind CSS 使用 HMR 可能無法自動編譯並重新套用等問題。

後面的系列文章,將會儘量以導入@nuxtjs/tailwindcss 模組的專案進行開發。


感謝大家的閱讀,這是我第一次參加 iThome 鐵人賽,請鞭小力一些,也歡迎大家給予建議 :)
如果對這個 Nuxt 3 系列感興趣,可以訂閱接收通知,也歡迎分享給喜歡或正在學習 Nuxt 3 的夥伴。

範例程式碼

參考資料


上一篇
[Day 04] Nuxt 3 + TypeScript + ESLint + Prettier 環境建置
下一篇
[Day 06] Nuxt 3 目錄結構與自動載入 (Auto Imports)
系列文
Nuxt 3 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
pdes0722
iT邦新手 5 級 ‧ 2023-12-31 03:26:30

發現需要將eslintrc.js跟prettierrc.js副檔名變成cjs,
prettier-plugin-tailwindcss才會正常運作

Ryan iT邦新手 1 級 ‧ 2024-01-02 15:14:45 檢舉

您是對的,後來的新版本會需要這樣做修改

這邊影片教學確實也是使用 cjs 的副檔名
https://ithelp.ithome.com.tw/articles/10322319

感謝您的提醒,文章內也同步做修改

我要留言

立即登入留言